#!/usr/common/bin/perl do "TeXthings"; do "getopts.pl" || die "$!"; do Getopts('n:idf:hqst'); if($opt_h) print STDERR < use this file for the job (from .mx to .tex/texnique) h this help text i create the indexes n use this as the name for the output files default: woven q operate quietly (no output) s only have full list of defines for first chunk ENDOFHELP exit; unless($opt_q) print STDERR "mx2tex version 3, 1994 by Rob Partington\n"; if($opt_d) { push(@options,"debugging"); } if($opt_f) { push(@options,"file:$opt_f"); } if($opt_i) { push(@options,"indexes"); } if($opt_n) { push(@options,"name:$opt_n"); } if($opt_s) { push(@options,"first define"); } if($opt_t) { push(@options,"force write"); } print STDERR "Options:",sort(join(' + ',@options)),"\n"; undef @options; $macrofile="nwindex"; if($opt_d) { $macrofile="nwidxmac"; } $filename=$opt_f; if($opt_n) { $filename=$opt_n; } open(TEX,">$filename.texnique") || die "$!"; if($opt_f) { push(@ARGV,"$filename.markup"); } unless(-e "$filename.tex" && !$opt_t) open(TEXCNTL,">$filename.tex") || die "$!"; print TEXCNTL <) if(/^begin code (.*)$/) { $delayed="\\nwbegincode{$1}"; $code=1; $text=5; } elsif(/^end code/) { print TEX "\\nwendcode{}\\filbreak$defing"; $code=0; } elsif(/^begin docs (.*)$/) { print TEX "\\nwbegindocs{$1}"; $text=0; $textmode=0; } elsif(/^end docs/) { print TEX "\\nwenddocs{}"; } elsif(/^text (.*)$/) { $text+=length $1; if($code==1) { print TEX &escapebslash($1); } elsif($quoting==1) { print TEX &TeXliteral($1); } else { print TEX $1; } $textmode=1 if $text>0; elsif(/^nl$/) { if($code==0) { if($text==0) { if($textmode==1) { print TEX "\\nwdocspar\\noindent\n"; } else { print TEX "\n"; } $textmode=1; $text=1; } else { print TEX "\n"; } } elsif($quoting) { print TEX "\\nwnewline"; } else { if($text>0) { print TEX "\n"; } } elsif(/^defn ([a-z]+)\|(.*)\|(.*)\| (.*)$/) { $xref=$1; $name=$2; $defing="\\makeref{$1}"; $deflist=$2; $uselist=$3; if($opt_s && @defns{$name} eq 'plus') { if(($firstr=index($deflist,'}\\'))!=-1) { $deflist=substr($deflist,0,$firstr) . '}}'; } if(($firstr=index($uselist,'}\\'))!=-1) { $uselist=substr($uselist,0,$firstr) . '}}'; } } print TEX "$delayed\\def\\list$deflist\\def\\ulist$uselist", "\\moddef{\\xp{\\$1}}{",&convquotes($4),"}", "\\inmodname\\",@defns{$name},"endmoddef"; $ignore=1; @defns{$name}='plus'; elsif(/^use ([a-z]+)\|(.*)\| (.*)$/) $deflist=$2; if($opt_s) { $deflist=~s/^({\\\\\{.*\}).*\}$/\1\}/;} print TEX "\\LA{}",&convquotes($3),"\\def\\list",$deflist,"\\inmodname\\RA{}"; elsif(/^quote$/) { $quoting=1; print TEX "{\\tt "; } elsif(/^endquote$/) { $quoting=0; print TEX "}"; $textmode=0; } elsif(/^file (.*)$/) { print TEX "\\filename{$1}"; } elsif(/^literal (.*)$/) { print TEX "$1"; } elsif(/^entry (.*)$/ && $opt_i) { print INDEX "$1\n"; } elsif(/^index (.*)$/ && $opt_i) { print STDERR "creating index `$filename.$1'\n" unless $opt_q; open(INDEX,">$filename.$1"); print INDEX "\\begingroup\\parindent=0pt\\obeylines%\n"; elsif(/^end index$/ && $opt_i) { print INDEX "\\endgroup\n"; close(INDEX); } print TEX "\\passfin\n";